<?php

class Image {

    private $conn;

    public function __construct() {
        $this->conn = new DataBase();
    }

    public function loadBucket($bucket = null) {
        return $this->conn->loadTable($bucket);
    }

    public function get($data) {
        if ($data["code"] == null && $data['targetId'] == null) {
            die(json_encode(["success" => false, "message" => "targetId hoặc code chưa được nhập"]));
        }
        $bucket = $data["bucket"];
        $image = $this->conn->get($bucket, $data['code'], $data['targetId']);
        if ($image == null || count($image) == 0) {
            die(json_encode(["success" => false, "message" => "Không tìm thấy ảnh yêu cầu"]));
        }
        $image = $image[0];
        $str = str_replace("image/", "", $image->dataType);
        $im = @imagecreatefromstring(base64_decode($image->media));
        $tw = @imagesx($im);
        if (!$tw) {
            echo "Đéo có ảnh";
        } else {
            $th = imagesy($im);
            $thumbWidth = $data["width"];
            if ($thumbWidth == 0 || $tw <= $thumbWidth) {
                $thumbWidth = $tw;
            }
            $thumbHeight = $th * ($thumbWidth / $tw);
            $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight);
            if ($str == 'gif') {
                $colorTransparent = imagecolortransparent($im);
                imagefill($thumbImg, 0, 0, $colorTransparent);
                imagecolortransparent($thumbImg, $colorTransparent);
            }
            if ($str == 'png') {
                imagealphablending($thumbImg, false);
                imagesavealpha($thumbImg, true);
                $transparent = imagecolorallocatealpha($thumbImg, 255, 255, 255, 127);
                imagefilledrectangle($thumbImg, 0, 0, $thumbWidth, $thumbHeight, $transparent);
            }
            imagecopyresampled($thumbImg, $im, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $tw, $th);

            header("Content-type: " . $image->dataType);
            if ($str == 'jpg' || $str == 'jpeg') {
                imagejpeg($thumbImg, NULL, 100);
            }
            if ($str == 'gif') {
                imagegif($thumbImg);
            }
            if ($str == 'png') {
                imagealphablending($thumbImg, TRUE);
                imagepng($thumbImg, NULL, 9, PNG_ALL_FILTERS);
            }
            imagedestroy($thumbImg);
        }
    }

//    public function get($data) {
//        if ($data["code"] == null && $data['targetId'] == null) {
//            die(json_encode(["success" => false, "message" => "targetId hoặc code chưa được nhập"]));
//        }
//        $bucket = $data["bucket"];
//        $image = $this->conn->get($bucket, $data['code'], $data['targetId']);
//        if ($image == null || count($image) == 0) {
//            die(json_encode(["success" => false, "message" => "Không tìm thấy ảnh yêu cầu"]));
//        }
//        $image = $image[0];
//        if ($data["width"] > 0 && $data["height"] > 0) {
//            header('Content-Type:' . $image->dataType);
//            echo base64_decode($image->media);
//        } else {
//            header('Content-Type:' . $image->dataType);
//            echo base64_decode($image->media);
//        }
//    }

    public function upload($data) {

        if ($data["targetId"] == null || $data["targetId"] == '') {
            die(json_encode(["success" => false, "message" => "TargetId chưa được nhập"]));
        }
        if ($data["media"] == null || !is_array($data["media"]) || $data["media"]['size'] == 0) {
            die(json_encode(["success" => false, "message" => "Không tìm thấy ảnh trên hệ thống"]));
        }

        $bucket = $data["bucket"];
        $image['dataType'] = $data["media"]['type'];
        $image['targetId'] = $data["targetId"];
        $image['media'] = base64_encode(file_get_contents($data["media"]['tmp_name']));
        $id = $this->conn->insert($bucket, $image);
        die(json_encode(["success" => true, "message" => "Upload ảnh thành công", "data" => $id]));
    }

    public function dowload($data) {
        $ch = curl_init();
        $timeout = 0;
        curl_setopt($ch, CURLOPT_URL, $data["url"]);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        $content = curl_exec($ch);
        curl_close($ch);

        $image = [];
        if ($data["url"] == null || $data["url"] == '') {
            die(json_encode(["success" => false, "message" => "Không tìm thấy url hình ảnh"]));
        }
        if ($data["targetId"] == null || $data["targetId"] == '') {
            die(json_encode(["success" => false, "message" => "TargetId chưa được nhập"]));
        }
        $imginfo = getimagesize($data['url']);
        $bucket = $data["bucket"];
        $image['dataType'] = $imginfo['mime'];
        $image['targetId'] = $data["targetId"];
        $image['media'] = base64_encode($content);
        $id = $this->conn->insert($bucket, $image);
        die(json_encode(["success" => true, "message" => "Upload ảnh thành công", "data" => $id]));
    }

    public function delete($data) {
        if ($data["code"] == null && $data['targetId'] == null) {
            die(json_encode(["success" => false, "message" => "targetId hoặc code chưa được nhập"]));
        }
        $bucket = $data["bucket"];
        $this->conn->delete($bucket, $data['code'], $data['targetId']);
        die(json_encode(["success" => true, "message" => "Xóa ảnh thành công"]));
    }

}
